/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.sigodonto.view.managedbean;

import br.com.sigodonto.model.dao.DentistaDao;
import br.com.sigodonto.model.entity.Clinica;
import br.com.sigodonto.model.entity.Dentista;
import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Fidelis
 */
@ManagedBean
@SessionScoped
public class LoginMB implements Serializable {

    /**
     * Creates a new instance of LoginMB
     */
    private Dentista dentista;
    private String username;
    private String senha;
    private DentistaDao dentistaDao;
    
    public LoginMB() {
        this.dentistaDao = new DentistaDao();
    }

    public Dentista getDentista() {
        return dentista;
    }

    public void setDentista(Dentista dentista) {
        this.dentista = dentista;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }
    
    public String login() {
        this.dentista = dentistaDao.verificarLogin(this.username, this.senha);
        
        FacesMessage msg;

        if (this.dentista != null && this.dentista.getContaUsuario().getStatus().equals("A")) {
            
            Clinica clinica = this.carregarClinica();

            ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
            HttpSession session = (HttpSession) externalContext.getSession(false);
            session.setAttribute("usuario", this.dentista);
            session.setAttribute("clinica", clinica);

            //USUÁRIO É UM ADMINISTRADOR
            if (this.dentista.getContaUsuario().getTipo().equals("AD")) {
                return "/admin/user-master/menuMaster.xhtml";
            //USUÁRIO É UM DENTISTA
            } else if (this.dentista.getContaUsuario().getTipo().equals("DE")) {
                return "/admin/user-simple/menuDentista.xhtml";
            }
        } else if(this.dentista == null) {
            msg = new FacesMessage("USERNAME E SENHA INCORRETOS!");
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
            FacesContext.getCurrentInstance().addMessage(null, msg);
            return "/index.xhtml";
        } else{
            msg = new FacesMessage("USUÁRIO BLOQUEADO!");
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
            FacesContext.getCurrentInstance().addMessage(null, msg);
            return "/index.xhtml";
        }
        msg = new FacesMessage("ERRO DESCONHECIDO!");
        msg.setSeverity(FacesMessage.SEVERITY_ERROR);
        FacesContext.getCurrentInstance().addMessage(null, msg);
        return "/index.xhtml";
    }
    
    public String logout() {
        String retorno = "/index.xhtml?faces-redirect=true";

        ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
        HttpSession session = (HttpSession) externalContext.getSession(true);
        Dentista userSessao = (Dentista) session.getAttribute("usuario");
        if (userSessao != null) {
            session.removeAttribute("usuario");
            session.invalidate();
        }
        return retorno;
    }
    
    private Clinica carregarClinica(){
        List<Clinica> clinicas = this.dentistaDao.listarTodos(Clinica.class);
        if(!clinicas.isEmpty()){
            Clinica clinica = new Clinica();
            for (Clinica clinica1 : clinicas) {
                clinica = clinica1;
            }
            return clinica;
        }
        return null;
    }
}
